/**   
 * @Title: IScmInvocingProductInforService.java 
 * @Package com.kerrykidz.scminvoicing.service 
 * @Description:与商品有关的Service方法
 * Copyright: Copyright (c) 2014 
 * Company:wuwh team by iss
 * @author: ScreenJxp   
 * @date: 2014年8月6日 上午11:54:35 
 * @version: V1.0
 * update Release(文件修正记录)
 * <pre>
 * author--updateDate--description----------------------Flag————
 * wuwh    2014-5-1    测试codesyle                      #wuwh001
 *
 *
 *
 * </pre>
 *
 */
package com.kerrykidz.scminvoicing.service;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.kerrykidz.dao.model.GblPosDiscountEntity;
import com.kerrykidz.scminvoicing.dao.model.GblScmPrdCateEntity;
import com.kerrykidz.scminvoicing.dao.model.GblScmPrdClassEntity;
import com.kerrykidz.scminvoicing.dao.model.GblScmPrdEntity;
import com.rdp.framework.exception.RDPException;

public interface IScmInvocingProductInfoService {
	/**
	 * 
	 * 
	 * @Title: findProductList
	 * @Description: <p>
	 *               查询商品信息
	 *               <p>
	 * 
	 *               <pre>
	 * 			这里描述这个方法的使用方法 – 可选
	 * </pre>
	 * @param: <p>
	 *         @param entity
	 * @param: <p>
	 *         @return
	 *         <p>
	 * @date: 2014年8月6日
	 * @return: List<GblScmPrdEntity>
	 * @throws
	 * 
	 */
	public List<GblScmPrdEntity> findProductList(GblScmPrdEntity entity) throws RDPException;

	/**
	 * 
	 * 
	 * @Title: saveProduct
	 * @Description: <p>
	 *               保存商品信息
	 *               <p>
	 * 
	 *               <pre>
	 * 			这里描述这个方法的使用方法 – 可选
	 * </pre>
	 * @param: <p>
	 *         @param entity
	 * @param: <p>
	 *         @throws RDPException
	 *         <p>
	 * @date: 2014年8月6日
	 * @return: void
	 * @throws
	 * 
	 */
	public void saveProduct(GblScmPrdEntity entity) throws RDPException;

	/**
	 * 
	 * 
	 * @Title: updateProduct
	 * @Description: <p>
	 *               修改商品信息
	 *               <p>
	 * 
	 *               <pre>
	 * 			这里描述这个方法的使用方法 – 可选
	 * </pre>
	 * @param: <p>
	 *         @param entity
	 * @param: <p>
	 *         @throws RDPException
	 *         <p>
	 * @date: 2014年8月6日
	 * @return: void
	 * @throws
	 * 
	 */
	public void updateProduct(GblScmPrdEntity entity) throws RDPException;

	/***
	 * 
	 * 
	 * @Title: deleteProduct
	 * @Description: <p>
	 *               删除商品信息
	 *               <p>
	 * 
	 *               <pre>
	 * 			这里描述这个方法的使用方法 – 可选
	 * </pre>
	 * @param: <p>
	 *         @param map
	 * @param: <p>
	 *         @throws RDPException
	 *         <p>
	 * @date: 2014年8月6日
	 * @return: void
	 * @throws
	 * 
	 */
	public void deleteProduct(Map<String, Object> map) throws RDPException;

	/**
	 * 
	 * 
	 * @Title: findCategoryList
	 * @Description: <p>
	 *               查询商品分类信息
	 *               <p>
	 * 
	 *               <pre>
	 * 			这里描述这个方法的使用方法 – 可选
	 * </pre>
	 * @param: <p>
	 *         @return
	 * @param: <p>
	 *         @throws RDPException
	 *         <p>
	 * @date: 2014年8月6日
	 * @return: List<GblScmPrdCateEntity>
	 * @throws
	 * 
	 */
	public List<GblScmPrdCateEntity> findCategoryList(GblScmPrdCateEntity entity) throws RDPException;

	/**
	 * 
	 * 
	 * @Title: saveProductCate
	 * @Description: <p>
	 *               保存商品分类信息
	 *               <p>
	 * 
	 *               <pre>
	 * 			这里描述这个方法的使用方法 – 可选
	 * </pre>
	 * @param: <p>
	 *         @param entity
	 *         <p>
	 * @date: 2014年8月6日
	 * @return: void
	 * @throws
	 * 
	 */
	public void saveProductCate(GblScmPrdCateEntity entity) throws RDPException;

	/**
	 * 
	 * 
	 * @Title: deleteProductCate
	 * @Description: <p>
	 *               删除商品分类信息
	 *               <p>
	 * 
	 *               <pre>
	 * 			这里描述这个方法的使用方法 – 可选
	 * </pre>
	 * @param: <p>
	 *         @param map
	 *         <p>
	 * @date: 2014年8月6日
	 * @return: void
	 * @throws
	 * 
	 */
	public void deleteProductCate(GblScmPrdCateEntity entity) throws RDPException;

	/**
	 * 
	 * 
	 * @Title: updateProductCate
	 * @Description: <p>
	 *               修改商品分类信息
	 *               <p>
	 * 
	 *               <pre>
	 * 			这里描述这个方法的使用方法 – 可选
	 * </pre>
	 * @param: <p>
	 *         @param entity
	 * @param: <p>
	 *         @throws RDPException
	 *         <p>
	 * @date: 2014年8月6日
	 * @return: void
	 * @throws
	 * 
	 */
	public void updateProductCate(GblScmPrdCateEntity entity) throws RDPException;

	/**
	 * 
	 * 
	 * @Title: addProduct
	 * @Description: <p>
	 *               新增商品
	 *               <p>
	 * 
	 *               <pre>
	 * 			这里描述这个方法的使用方法 – 可选
	 * </pre>
	 * @param: <p>
	 *         @param entity
	 * @param: <p>
	 *         @throws RDPException
	 *         <p>
	 * @date: 2014年8月8日
	 * @return: void
	 * @throws
	 * 
	 */
	public void addProduct(GblScmPrdEntity entity) throws RDPException;

	/**
	 * 
	 * 
	 * @Title: getProductInfo
	 * @Description: <p>
	 *               获取商品列表的信息的公共接口
	 *               <p>
	 * 
	 *               <pre>
	 * 			这里描述这个方法的使用方法 – 可选
	 * </pre>
	 * @param: <p>
	 *         @param resverseType 商品分类类型
	 * @param: <p>
	 *         @param fkBranId 门店id
	 * @param: <p>
	 *         @throws RDPException
	 *         <p>
	 * @date: 2014年8月8日
	 * @return: void
	 * @throws
	 * 
	 */
	public List<GblScmPrdEntity> getProductInfo(GblScmPrdEntity entity) throws RDPException;

	/**
	 * 
	 * 
	 * @Title: getProductList
	 * @Description: <p>
	 *               获取商品信息
	 *               <p>
	 * 
	 *               <pre>
	 * 			这里描述这个方法的使用方法 – 可选
	 * </pre>
	 * @param: <p>
	 *         @param entity
	 * @param: <p>
	 *         @return
	 * @param: <p>
	 *         @throws RDPException
	 *         <p>
	 * @date: 2014年8月21日
	 * @return: List<GblScmPrdEntity>
	 * @throws
	 * 
	 */
	public GblScmPrdEntity getProductList(GblScmPrdEntity entity) throws RDPException;

	/**
	 * 
	 * 
	 * @Title: findAllDiscount
	 * @Description: <p>
	 *               取得所有预定义折扣列表（经理用）
	 *               <p>
	 * @date: 2014年8月11日
	 * @return: List<GblPosDiscountEntity>
	 * @throws
	 * 
	 */
	public List<GblPosDiscountEntity> findAllDiscount() throws RDPException;

	/**
	 * 
	 * 
	 * @Title: getProductListForCollection
	 * @Description: <p>
	 *               根据采购订单获取商品信息
	 *               <p>
	 * 
	 *               <pre>
	 * 			这里描述这个方法的使用方法 – 可选
	 * </pre>
	 * @param: <p>
	 *         @param fkPurordId
	 * @param: <p>
	 *         @return
	 * @param: <p>
	 *         @throws RDPException
	 *         <p>
	 * @date: 2014年8月12日
	 * @return: List<GblScmPrdEntity>
	 * @throws
	 * 
	 */
	public List<GblScmPrdEntity> getProductListForCollection(String fkPurordId) throws RDPException;

	/**
	 * 
	 * @Description
	 * @param productId
	 *            商品编号
	 * @param branId
	 *            门店编号
	 * @return
	 * @author QUINN
	 * @date 2014年8月13日下午4:12:39
	 */
	GblScmPrdEntity getProductById(String productId, String branId) throws RDPException;

	/**
	 * 
	 * @Description 分页查询商品
	 * @param product
	 * @return
	 * @author QUINN
	 * @date 2014年8月15日下午7:33:36
	 */
	GblScmPrdEntity paginateGoods(GblScmPrdEntity product) throws Exception;

	/**
	 * 
	 * 
	 * @Title: saveClassProduct
	 * @Description: <p>
	 *               保存课程类商品
	 *               <p>
	 * 
	 *               <pre>
	 * 			这里描述这个方法的使用方法 – 可选
	 * </pre>
	 * @param: <p>
	 *         @param entity
	 * @param: <p>
	 *         @throws RDPException
	 *         <p>
	 * @date: 2014年8月25日
	 * @return: void
	 * @throws
	 * 
	 */
	public void saveClassProduct(GblScmPrdClassEntity entity) throws RDPException;

	/**
	 * 
	 * 
	 * @Title: findProductById
	 * @Description: <p>
	 *               根据商品的Id和商品的类型查找
	 *               <p>
	 * 
	 *               <pre>
	 * 			这里描述这个方法的使用方法 – 可选
	 * </pre>
	 * @param: <p>
	 *         @param entity
	 * @param: <p>
	 *         @return
	 * @param: <p>
	 *         @throws RDPException
	 *         <p>
	 * @date: 2014年8月25日
	 * @return: Map
	 * @throws
	 * 
	 */
	public GblScmPrdEntity findProductById(GblScmPrdEntity entity) throws RDPException;

	/**
	 * 根据商品分类I的，获取，其子类的分类Id
	 * 
	 * @param cateId
	 * @return
	 * @throws RDPException
	 * @date: 2014年8月29日
	 */
	public List<String> findChildCateById(@Param("cateId") String cateId) throws RDPException;

	/**
	 * 根据ID查询关联单次票扩展信息
	 * 
	 * @param pkId
	 * @return
	 * @throws RDPException
	 * @date: 2014年8月28日
	 */
	public GblScmPrdEntity findSingleTicket(String pkId) throws RDPException;

	/**
	 * 根据会员查询单次票商品
	 * 
	 * @return
	 */
	public List<GblScmPrdEntity> findSingleTicketByMemId(@Param("pkMemId") String pkMemId,
			@Param("resverseType") String resverseType);

	/**
	 * 查询所有课程类商品
	 * 
	 * @return
	 */
	public List<GblScmPrdEntity> findAllLessonsProduct();

	/***
	 * 商品分类是否可以删除
	 * 
	 * @param cateId
	 * @return
	 * @throws RDPException
	 * @date: 2014年10月13日
	 */
	public Integer deleteAbled(String cateId) throws RDPException;

	/**
	 * check是否可以停用或删除商品
	 * 
	 * @param pkPrdId
	 * @return
	 * @throws RDPException
	 * @date: 2014年10月13日
	 */
	public String canAbled(GblScmPrdEntity entity) throws RDPException;

	/**
	 * 
	 * @Desc 递归查询商品分类
	 * @author QUINN
	 * @date 2014年10月24日下午2:29:55
	 * @param id
	 *            分类id
	 * @param hasCurrent
	 *            是否要返回当前id的分类
	 * @param lower
	 *            true,返回当前id分类的所有子分类;false，返回当前id分类的所有父分类
	 * @return
	 */
	List<GblScmPrdCateEntity> recurseCate(String id, boolean hasCurrent, boolean lower) throws RDPException;

}
